"""
公司信息管理API路由
演示单例模式的数据管理（通常只有一条公司信息记录）
"""
from typing import List
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session

from ..database import get_db
from ..models.company_info import CompanyInfo
from ..models.user import User
from ..schemas.company import (
    CompanyInfoCreate, CompanyInfoUpdate,
    CompanyInfoResponse, ContactInfo
)
from ..dependencies import get_current_active_user


router = APIRouter(prefix="/api/company", tags=["公司信息管理"])


@router.get("/info", response_model=CompanyInfoResponse, summary="获取公司信息")
async def get_company_info(db: Session = Depends(get_db)):
    """
    获取公司信息

    演示了单例模式的数据管理：
    - 通常只有一条公司信息记录
    - 如果不存在则返回404
    """
    company_info = db.query(CompanyInfo).first()

    if not company_info:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail="公司信息未设置"
        )

    return company_info


@router.post("/info", response_model=CompanyInfoResponse, summary="创建公司信息")
async def create_company_info(
    company_data: CompanyInfoCreate,
    current_user: User = Depends(get_current_active_user),
    db: Session = Depends(get_db)
):
    """
    创建公司信息

    需要管理员权限
    注意：通常只允许创建一条公司信息记录
    """
    # 检查是否已存在公司信息
    existing_info = db.query(CompanyInfo).first()
    if existing_info:
        raise HTTPException(
            status_code=status.HTTP_400_BAD_REQUEST,
            detail="公司信息已存在，请使用更新接口"
        )

    # 创建公司信息
    db_company_info = CompanyInfo(**company_data.dict())

    # 保存到数据库
    db.add(db_company_info)
    db.commit()
    db.refresh(db_company_info)

    return db_company_info


@router.put("/info", response_model=CompanyInfoResponse, summary="更新公司信息")
async def update_company_info(
    company_data: CompanyInfoUpdate,
    current_user: User = Depends(get_current_active_user),
    db: Session = Depends(get_db)
):
    """
    更新公司信息

    需要管理员权限
    如果不存在公司信息，则自动创建
    """
    # 查找现有的公司信息
    db_company_info = db.query(CompanyInfo).first()

    if not db_company_info:
        # 如果不存在，则创建新的公司信息
        # 将更新数据转换为创建数据（排除None值）
        create_data = company_data.dict(exclude_unset=True)

        # 确保必填字段有默认值
        if 'company_name' not in create_data:
            create_data['company_name'] = "环境工程咨询公司"

        db_company_info = CompanyInfo(**create_data)
        db.add(db_company_info)
    else:
        # 更新现有记录
        update_data = company_data.dict(exclude_unset=True)
        for field, value in update_data.items():
            setattr(db_company_info, field, value)

    # 保存更改
    db.commit()
    db.refresh(db_company_info)

    return db_company_info


@router.get("/contact", response_model=ContactInfo, summary="获取联系信息")
async def get_contact_info(db: Session = Depends(get_db)):
    """
    获取联系信息（公开接口，无需认证）

    这个接口专门为前端页面提供联系信息
    只返回必要的联系字段，不包含敏感信息
    """
    company_info = db.query(CompanyInfo).first()

    if not company_info:
        # 返回空的联系信息而不是404错误
        return ContactInfo()

    return ContactInfo(
        phone=company_info.phone,
        email=company_info.email,
        fax=company_info.fax,
        address=company_info.address,
        website=company_info.website
    )


@router.delete("/info", summary="删除公司信息")
async def delete_company_info(
    current_user: User = Depends(get_current_active_user),
    db: Session = Depends(get_db)
):
    """
    删除公司信息

    需要管理员权限
    注意：这个操作比较危险，实际项目中可能需要额外的确认
    """
    # 查找公司信息
    db_company_info = db.query(CompanyInfo).first()

    if not db_company_info:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail="公司信息不存在"
        )

    # 删除公司信息
    db.delete(db_company_info)
    db.commit()

    return {"message": "公司信息删除成功"}